package com.yc.cloud.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yc.cloud.admin.dto.request.UmsAdminParam;
import com.yc.cloud.admin.dto.request.UmsAdminUpdateParam;
import com.yc.cloud.admin.dto.request.UpdateAdminPasswordParam;
import com.yc.cloud.basic.dto.BaseQueryParam;
import com.yc.cloud.entity.UmsAdmin;
import com.yc.cloud.entity.UmsResource;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.List;

/**
 * <p>
 * 后台用户表 服务类
 * </p>
 *
 * @author JackGu
 * @since 2022-09-11
 */
public interface UmsAdminService extends IService<UmsAdmin> {

    /***
     * description:查询列表
     * @param param 查询条件
     * @return 数据信息
     */
    IPage<UmsAdmin> list(BaseQueryParam param);


    String queryByUserNameAndPassword(String username, String password);

    /**
     * 获取用户信息
     */
    UserDetails loadUserByUsername(String username);

    /**
     * 通过用户名查询
     */
    UmsAdmin queryByUserName(String username);


    /**
     * 根据用户名获取后台管理员
     */
    UmsAdmin getAdminByUsername(String username);

    /**
     * 获取当前登录者信息
     */
    UmsAdmin getAdmin();


    /**
     * 获取指定用户的可访问资源
     */
    List<UmsResource> getResourceList(UmsAdmin umsAdmin);


    /**
     * 注册账号
     */
    UmsAdmin register(UmsAdminParam umsAdminParam);


    void logout();

    int updatePassword(UpdateAdminPasswordParam updatePasswordParam);

    /**
     * 修改指定用户信息
     */
    int update(Long id, UmsAdminUpdateParam admin);

    String refreshToken(String token);

    UmsAdmin create(UmsAdminParam param);

    String generateMd5(String password);
}

